package cn.wen.yaling.xo.service;

import cn.wen.yaling.commons.vo.CommentChildVO;
import cn.wen.yaling.commons.vo.CommentListVO;
import cn.wen.yaling.commons.vo.CommentVO;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.wen.yaling.commons.utils.PageUtils;
import cn.wen.yaling.commons.entity.CommentEntity;

import java.util.List;
import java.util.Map;

/**
 * 
 *
 * @author FY
 * @email 932043654@qq.com
 * @date 2022-08-13 02:07:37
 */
public interface CommentService extends IService<CommentEntity> {

    PageUtils queryPage(Map<String, Object> params);

    /**
     * 通过文章Id获取评论数量
     * @param articleId
     * @return
     */
    Long getCommentNumByArticleId(Integer articleId);

    /**
     * 评论总数
     * @return
     */
    Long getCommentTotalNum();

    /**
     * 通过文章的id来获取全部的评论列表
     * @param articleId
     * @return
     */
    List<CommentVO> listCommentByArticleId(Integer articleId);

    /**
     * 发表评论 包括
     * @param commentEntity
     * @return
     */
    boolean insertComment(CommentEntity commentEntity);

    /**
     * 获取关于我的评论列表
     * @return
     */
    List<CommentVO> getAboutCommentList();

    /**
     * 添加一次
     * @param articleId
     */
    void updateArticleViewsNum(Integer articleId);

    /**
     * 获取问题的评论数量
     * @param questionId
     * @return
     */
    Long getCommentNumByQuestionId(Integer questionId);

    /**
     * 通过问题的Id获取当前问答下的所有评论
     * @param questionId
     * @return
     */
    List<CommentVO> listCommentByQuestionId(Integer questionId);

    /**
     * 获取关于我的评论数量
     * @return
     */
    Long getAboutCommentCount();

    /**
     * 通过评论类型获取
     * @param type
     * @return
     */
    List<CommentListVO> getCommentListByType(Integer type);

    /**
     * 通过父评论来获取到子回复列表
     * @param parentId
     * @return
     */
    List<CommentChildVO> getChildCommentList(Integer parentId);

    /**
     * 批量删除评论信息
     * @param commentIds
     * @return
     */
    boolean deleteCommentByIds(List<Integer> commentIds);

    /**
     * 修改评论的状态
     * @param commentId
     * @param status
     * @return
     */
    boolean updateCommentStatusById(Integer commentId, Integer status);

    /**
     * 通过状态获取评论数量
     * @param status
     * @return
     */
    Long getCommentCountByStatus(int status);

    /**
     * 通过评论内容 和 类别查询查询
     * @param type
     * @param keyword
     * @return
     */
    List<CommentListVO> searchCommentListByType(Integer type, String keyword);
}

